"""
应用启动时自动检查脚本
在应用启动时自动验证数据库结构和系统健康状态
"""
from app import create_app, db
from scripts.validate_database import validate_database
from flask import jsonify
import sys
import os

def startup_checks():
    """应用启动时的检查"""
    app = create_app()
    with app.app_context():
        print("正在执行应用启动检查...")
        
        # 1. 验证数据库结构
        print("1. 验证数据库结构...")
        issues = validate_database()
        
        if issues:
            print(f"\n❌ 发现 {len(issues)} 个问题:")
            for i, issue in enumerate(issues, 1):
                print(f"   {i}. {issue}")
            
            print("\n⚠️  建议在启动应用前修复这些问题")
            
            # 检查是否在交互模式下
            if not os.environ.get('FLASK_RUN_FROM_CLI') and sys.stdin.isatty():
                response = input("\n是否继续启动应用? (y/N): ")
                if response.lower() != 'y':
                    print("应用启动已取消")
                    sys.exit(1)
            else:
                # 非交互模式下，自动继续
                print("\n自动继续启动应用...")
        else:
            print("   ✅ 数据库结构验证通过")
        
        # 2. 检查数据库连接
        print("\n2. 检查数据库连接...")
        try:
            db.session.execute(db.text('SELECT 1'))
            print("   ✅ 数据库连接正常")
        except Exception as e:
            print(f"   ❌ 数据库连接失败: {str(e)}")
            print("⚠️  请检查数据库配置和连接")
            sys.exit(1)
        
        # 3. 检查基本数据
        print("\n3. 检查基本数据...")
        try:
            from app.models.user import User
            user_count = User.query.count()
            print(f"   ✅ 用户表数据正常 (共 {user_count} 个用户)")
        except Exception as e:
            print(f"   ❌ 检查用户数据失败: {str(e)}")
        
        print("\n✅ 启动检查完成")

if __name__ == '__main__':
    startup_checks()